﻿using System;
using System.Data.SqlClient;
using System.Net.Mail;

/// <summary>
/// Servicios para enviar los correos a los alumnos
/// </summary>
public class MailService
{

    // Añade el mensaje que se le enviará al usuario al recuperar su password
    public void PasswordRecoveryMail(String alumnoMail)
    {
        String[] alumnoData = alumnoMail.Split('@');
        DatabaseConnection dbCon = new DatabaseConnection();
        Boolean userExistsBool = dbCon.UserExists(alumnoData[0].ToUpper(), "Alumnos");
        if (userExistsBool)
        {
            SecurityTools sc = new SecurityTools();
            String newPassword = sc.SaltGenerator(); // Un salt random será el nuevo password temporal
            String newPasswordSalt = sc.SaltGenerator();
            String newPasswordHash = sc.HashPassword(newPassword + newPasswordSalt);

            // Se actualiza el passwor nuevo en la base de datos
            String query = "UPDATE Alumnos SET Contrasena = @NewPassword, Salt = @NewPasswordSalt WHERE Matricula = @Matricula";
            using (SqlCommand passwordUpdate = new SqlCommand(query))
            {
                passwordUpdate.Parameters.Add(new SqlParameter("@Matricula", alumnoData[0]));
                passwordUpdate.Parameters.Add(new SqlParameter("@NewPassword", newPasswordHash));
                passwordUpdate.Parameters.Add(new SqlParameter("@NewPasswordSalt", newPasswordSalt));

                dbCon.ParameterizedExecuteNonQuery(passwordUpdate);
            }
            
            String mailSubject = "Recuperación de contraseña para cuenta de Becas de Filantropía";
            String mailMessage = "Tu nueva contaseña es: " + newPassword + "\nTe sugerimos cambiarla tan pronto accedas a tu cuenta.";
            
            SendMail(alumnoMail, mailSubject, mailMessage);
        }
        dbCon.CloseConnection();
    }


    // Añade el mensaje que se le enviará al usuario para que valide su cuenta
    public void ValidationMail(String alumnoMail, String userValidationString)
    {

        String mailSubject = "Confirmación requerida para Becas de Filantropía";
        String mailMessage = "Agradecemos que te hayas registrado para aplicar a la beca, pero necesitamos " +
                         "que confirmes tu cuenta dando clic en la siguiente liga: \n\n" +
                         "http://localhost:56208/website/Services/UserActivation.aspx?ValidationString=" + userValidationString;

        SendMail(alumnoMail, mailSubject, mailMessage);
    }


    // Envía el correo electrónico
    public void SendMail(String alumnoMail, String mailSubject, String mailMessage)
    {
        MailAddress to = new MailAddress(alumnoMail);
        MailAddress from = new MailAddress("A00799461@itesm.mx", "Becas de Filantropía");

        MailMessage message = new MailMessage(from, to)
        {
            Subject = mailSubject,
            Body = mailMessage
        };

        var smtp = new SmtpClient();

        try
        {
            Console.WriteLine("Sending e-mail message...");
            smtp.Send(message);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: {0}", ex);
        }
    }
}
